 $ type sys$help:BASIC031.RELEASE_NOTES;1



RELEASE NOTES FOR VAX BASIC V3.1

These notes contain sections covering the following topics:

      o  Technical changes since the last release

      o  Problems fixed in this release

      o  Restrictions on the use of features

      o  Known current problems for VAX BASIC and the  associated  RTL
         support

      o  Graphics incompatibilities introduced by VAX GKS Version 3.0

      o  Additional installation considerations

      o  Documentation errors and omissions

      o  How to report software problems



NEW FEATURES FOR VERSION 3.1 OF VAX BASIC

VAX BASIC Version  3.1  includes  support  for  the  VAX  Source  Code
Analyzer  (SCA).   VAX  SCA  allows  you to navigate the source for an
application from DCL level as well as from within the LSE editor.  You
use  SCA by creating an SCA library and then compiling the source file
you  want  to  examine  with  the   /ANALYSIS_DATA   qualifier.    The
/ANALYSIS_DATA  qualifier  generates  a file containing analysis data.
You can then load analysis data files into an SCA library and  perform
queries  to  obtain  information  about the source for an application.
See Appendix C of the VAX BASIC User Manual for  more  information  on
SCA features.

See the section PROBLEMS FIXED FOR THIS VERSION for information  about
bug fixes.

PROBLEMS FIXED IN THIS VERSION

The following problems in previous versions of  VAX  BASIC  have  been
corrected in VAX BASIC Version 3.1:

      o  Previously,  programs  containing  FILL   items   in   RECORD
         structures exhibited one or more of the following problems if
         the FILL field was followed by  a  comma  and  another  field
         (either  on  the same line or continued on the next line with
         an ampersand (&) character):

          -  All fields following the  FILL  field  had  an  incorrect
             offset;  therefore,  data  was  stored incorrectly in the
             record.


                                                                Page 2


          -  Compiling the program caused an access violation error.

          -  Compiling the program caused an internal coding error.


         All of these problems have been fixed.

      o  VAX BASIC previously reported a fatal compile-time error when
         the  datatype of a record component was defaulted following a
         FILL item.  BASIC V3.1 no longer fails in this situation.

      o  VAX BASIC now reports an informational message if  extraneous
         information follows a command in the VAX BASIC environment.

      o  In some cases, a reference to a COMMON or MAP  array  with  a
         non-zero   lower   bound  specification  would  result  in  a
         reference to the wrong array element.  This problem has  been
         fixed.

      o  The LIST and  RUN  commands  in  the  VAX  BASIC  environment
         previously  displayed  an incorrect source file name when the
         source file specification included a search  list  device  or
         directory specification.  This problem has been fixed.

      o  If a RECORD extracted from the  CDD  was  larger  than  65535
         bytes  in  length,  the  compiler reported an erroneous fatal
         CDDALCOFF error in addition to the RECTOOLAR error indicating
         that  the  size  limit on a RECORD is 65535 bytes.  VAX BASIC
         now reports the RECTOOLAR error only.

      o  Use of a virtual array of a user-defined type where the  type
         includes  a  STRING  component no longer results in incorrect
         generated code on a reference to a component within an  array
         element.

      o  If a program containing a detached handler was compiled  with
         the  /CROSS_REFERENCE qualifier, VAX BASIC signaled the error
         "Access violation".  The /CROSS_REFERENCE qualifier no longer
         generates an error in this situation.

      o  Previously, if a main program did not begin  with  a  PROGRAM
         statement  and  the  file  name of the program contained more
         than 31 characters, compiling  the  program  resulted  in  an
         incorrect  representation of string constants.  Additionally,
         if the ERN$ built-in function was used in  the  program,  VAX
         BASIC  signaled an access violation error at run time.  These
         problems have been fixed.  Any VAX BASIC program can now have
         a filename with a maximum of 39 characters.

      o  If you use a static string that is declared as a parameter to
         a  DEF  or DEF* function as the storage area in a MAP DYNAMIC
         or REMAP statement, VAX BASIC now signals an error  when  the
         program is compiled.









                                                                Page 3


      o  Previously, if the storage area in the REMAP statement was  a
         static  string  with  the  same name as a map name, VAX BASIC
         incorrectly reported the error "<name> is not a  DYNAMIC  MAP
         variable  of  MAP  <name>" for the variables named in the MAP
         DYNAMIC statement.  This problem has been fixed.

      o  VAX BASIC now signals an error if multiple main program units
         are contained within a single source file.

      o  Previously, if a program contained  two  EXTERNAL  statements
         which  defined  the  same  procedure, and the second EXTERNAL
         statement included a dimensioned formal in the parameter list
         and  the first EXTERNAL statement did not, VAX BASIC signaled
         an access violation error during compilation.   This  problem
         has been fixed.

      o  Previously, VAX BASIC signaled an access violation error if a
         program  was compiled with the /MAP qualifier and the program
         contained two DIM  statements  specifying  the  same  channel
         number.  This problem has been fixed.

      o  Attempting to pass an EXTERNAL variable by descriptor will no
         longer  cause  the  internal compile-time error, "Code length
         estimate error".

      o  Previously, if a program line was not compiled because it was
         contained  in  a  conditional block of code, the ERL function
         returned an  erroneous  line  number  for  the  error.   This
         problem has been fixed.

RESTRICTIONS

The following restrictions exist for VAX BASIC V3.1:

      o  You cannot concatenate programs at DCL level with a plus sign
         (+)  if  one  or  more  of the programs contain no BASIC line
         numbers.  For example, the following command will generate an
         error if either A.BAS or B.BAS contains no line numbers:

         $ BASIC A + B 


      o  You cannot  use  a  static  string  that  is  declared  as  a
         parameter  to a DEF or DEF* function as the storage area in a
         MAP DYNAMIC or REMAP statement.

      o  VAX BASIC allows a maximum of 65535 dynamic string variables,
         dynamic  string  array  elements, and string temporaries in a
         single compilation unit.  An attempt to  allocate  more  than
         65535 dynamic strings may result in a Stack Overflow error at
         run-time.











                                                                Page 4


INCOMPATIBILITIES WITH VERSION 2.n OF VAX BASIC

Consult the release notes for VAX BASIC V3.0 for information regarding
incompatibilities  between  VAX  BASIC 3.n and VAX BASIC 2.n.  The VAX
BASIC   Version    3.0    release    notes    can    be    found    in
SYS$HELP:BASIC030.RELEASE_NOTES.

KNOWN PROBLEMS

      o  COMPILER PROBLEMS

         This section summarizes problems in the  VAX  BASIC  compiler
         that have not been fixed for this release.

          -  If a program containing a MAP DYNAMIC or REMAP  statement
             identifying  a storage area with a static string variable
             is compiled  with  the  /CROSS_REFERENCE  qualifier,  VAX
             BASIC signals the error "Access violation".

          -  If a program contains a %INCLUDE %FROM %CDD directive and
             a  normal  %INCLUDE  directive  that  has errors reported
             during the compilation, an invalid LSE  diagnostics  file
             may be generated.

          -  Compiling a program that  includes  another  source  file
             that  contains  more  lines  than the file containing the
             %INCLUDE  directive  may  result  in   an   invalid   LSE
             diagnostics file.

          -  In a program without line numbers,  VAX  BASIC  does  not
             report an error if line number 1 is referenced as a GOTO,
             GOSUB, RESUME or CONTINUE target.

          -  If a record contains a dimensioned  group  that  in  turn
             contains  an element that is an array, attempting to pass
             the entire record element array as a parameter results in
             an internal coding error being reported.  For example:

               RECORD Rec_type
                 GROUP Grp(10)
                   LONG Element(5)
                 END GROUP
               END RECORD
               DECLARE Rec_type Rec
               CALL SUBPROG (Rec::Grp(0)::Element() )

          -  If a  RECORD  definition  is  empty,  VAX  BASIC  reports
             extraneous error messages.  For example:

               10      RECORD Record_1
                       END RECORD
               20      DECLARE Record_1 My_record

             Because the RECORD block at line 10 is empty,  VAX  BASIC
             incorrectly reports an error for the DECLARE statement.








                                                                Page 5


          -  Cross-reference  listings  incorrectly   list   MOVE   TO
             statements  as  destructive  references  of the variables
             whose values are being moved into the I/O  buffer.   MOVE
             TO statements are not destructive references.

          -  FOR loop indices are not marked as destructive references
             in the cross-reference listing.

          -  It is illegal to reference a DEF or FUNCTION  name  in  a
             MOVE  TO or MOVE FROM statement.  However, VAX BASIC does
             not signal an error if you make such  a  reference.   For
             example:

               10      DEF* FNA
                       .
                       .
                       FNEND

               20      MOVE FROM  1%, FNA

             The statement at line 20 should be signaled as  an  error
             during compilation, but is not.

          -  If an array of a RECORD data type is declared in  a  MAP,
             the   allocation   section  of  the  compilation  listing
             erroneously reports the size of the array as  the  square
             of the actual array size.  Even though the allocation map
             reports an incorrect size, the actual allocation  of  the
             array is correct.

          -  If you specify an  illegal  string  expression  with  the
             FORMAT$  function,  VAX  BASIC  signals the error "Access
             violation".

          -  DEF and DEF* functions that follow a  DEF  function  that
             contain  a  MAT or a DRAW statement will not be allocated
             properly in the generated code.  As a  result,  any  data
             following  the  corrupted  DEF  or  DEF*  function in the
             generated code will also be corrupted.  For example:

               PRINT "This string constant will be corrupted because of"
               PRINT "the allocation error caused by the DEF FN_BUG."

               DEF FN_CONTAINING_MAT_STMT
                 MAT PL_SQUARED = PL * PL
               FNEND

               DEF FN_BUG
                 PRINT "This DEF is not allocated properly because it follows"
                 PRINT "a DEF which contains a MAT or DRAW statement."
               FNEND

             A temporary solution for this problem is to make the  DEF
             function  containing  the  MAT or DRAW statement the last
             DEF function definition in the  program.   Alternatively,








                                                                Page 6


             you can change the DEF to a FUNCTION definition.

          -  If an array with a numeric data type other than  LONG  or
             DECIMAL  is  dimensioned at run time, and then an element
             of that array is used as  a  subscript  (other  than  the
             first  subscript) for another array, VAX BASIC signals an
             internal coding error.  For example:

                 DECLARE LONG BASE_ARR (1, 5)
                 DIMENSION WORD ARR (TOTAL_COUNT)
                 I% = BASE_ARR (0, ARR(0))

             Similarly, if the numeric array is not dimensioned at run
             time,  but  it  is passed as a parameter by descriptor to
             another routine, and then an element  of  that  array  is
             used  as a subscript (other than the first subscript) for
             another array,  VAX  BASIC  signals  an  internal  coding
             error.  For example:

                 DECLARE LONG BASE_ARR (1, 5)
                 DECLARE WORD ARR (2%)
                 CALL EXT_SUB (ARR ())
                 I% = BASE_ARR (0, ARR(0))

             A temporary solution for these problems is to assign  the
             array  element to be used as a subscript to a LONG scalar
             variable,  and  then  use  the  scalar  variable  as  the
             subscript.  For example:

                 TEMP_LONG_VAR = ARR(0)
                 I% = BASE_ARR (0, TEMP_LONG_VAR)

          -  If the value returned from the ABS built-in  function  is
             assigned  to  a  variable of data type DECIMAL, the value
             may be incorrect.  Similarly, if the argument to the  MAG
             built-in  function  is of a REAL data type, and the value
             returned is assigned to a variable of data type  DECIMAL,
             the value may be incorrect.  For example:

                 declare DECIMAL (5,2) dec1, dec2
                 declare SINGLE constant sgl_cons = -98.76
                 dec1 = ABS (sgl_cons)
                 dec2 = MAG (sgl_cons)

             A temporary solution to this problem  is  to  assign  the
             value  returned by the built-in function to a variable of
             a REAL data type, and then assign the value in  the  REAL
             variable to the DECIMAL variable.

          -  An error handler in a subprogram cannot trap the run-time
             error  "REMAP  string  is not static" (ERR=196); however,
             the error handler of the calling program  can  trap  this
             error.










                                                                Page 7


      o  GRAPHICS PROBLEMS

         The following problems will be corrected in a future  release
         of VAX GKS:

          -  On VT241 terminals, it is possible to set the point  size
             to  a  value greater than the maximum returned by the ASK
             MAX POINT SIZE statement.  However, point  sizes  greater
             than the maximum are not clipped correctly.

          -  On VT241 terminals, the size of the text  characters  for
             CHOICE  input  can  sometimes  be too small and yet later
             change  to  larger  characters.   When  the  text  height
             increases,  the  highlighting  of  the  current choice is
             incorrect.

         The following problems exist in  the  Run-Time  Library  code
         that  supports VAX BASIC graphics statements.  These problems
         will  be  corrected  in  a  future  release  of  the  VAX/VMS
         operating system:

          -  On   VT241   terminals,    the    following    statements
             intermittently generate the error "Unknown GKS error":

              o  LOCATE STRING with an initial value

              o  SET INITIAL STRING

              o  SET STRING ECHO AREA


          -  On VAXstations, the text extent box returned by  the  ASK
             TEXT  EXTENT statement is intermittently incorrect.  This
             can occur when STRING precision has been specified  in  a
             previous SET TEXT FONT statement.

          -  When the device viewport is changed to be larger than the
             default  viewport for the device, the echo area for POINT
             and MULTIPOINT input is not changed  accordingly.   Until
             this  problem  is  fixed,  POINT  and MULTIPOINT input is
             limited to the default device viewport.

          -  When  a  PLOT  LINES  statement  without  any  points  is
             executed,  the  screen  is  not  updated.   To update the
             screen, use one of the following statements:

              o  A CLEAR statement

              o  A PLOT LINES statement with  a  pair  of  coordinates
                 without a trailing semicolon

              o  Any graphics output statement except PLOT LINES  with
                 no coordinates










                                                                Page 8


          -  A PLOT LINES statement can leave the "beam of  light"  on
             if   you  add  a  semicolon  (;)  after  the  last  point
             specified.  This causes a line  to  be  drawn  from  this
             point  to  the  next point specified in a subsequent PLOT
             LINES statement.  VAX BASIC should turn the beam of light
             off  upon  entering  and  leaving  a  PICTURE subprogram;
             however, the beam of light is erroneously left on.   This
             behavior may change in a future release of VAX/VMS.

             To ensure the correct behavior,  programs  that  use  the
             PLOT  LINES  statement  followed  by  a  semicolon should
             explicitly turn the beam of light off upon  entering  and
             exiting  each  PICTURE  subprogram.  You can turn off the
             beam of light by executing any graphics input  or  output
             statement other than a PLOT LINES statement followed by a
             semicolon.


      o  RUN-TIME LIBRARY PROBLEMS

         The following problems exist in  the  Run-Time  Library  code
         that  supports  VAX  BASIC  routines.  These problems will be
         fixed in a future release of the VAX/VMS operating system.


          -  The RAB$V_WAT and RAB$V_TMO bits for the RAB$L_ROP  field
             are  now  used  by  VAX  BASIC.  Applications that access
             these bits with  a  USEROPEN  clause  currently  may  not
             behave  as  expected.   A  future release of VAX/VMS will
             preserve  the  settings  of  these  bits  by  a  USEROPEN
             routine.  As of VAX BASIC V3.0 you can control these bits
             with the WAIT clause on the GET and FIND statements.

          -  If a program contains a MOVE TO statement and the data to
             be  moved  is in a DECIMAL array, some of the data in the
             array may not be moved.

          -  When a PICTURE, external FUNCTION, or SUB  subprogram  is
             called  with  too  few arguments and the called procedure
             uses an array,  VAX  BASIC  signals  the  error  "Integer
             error"  (ERR=51).  The generated error should be "Too few
             arguments" (ERR=97).

          -  When a file is locked  by  another  process  and  a  KILL
             statement  is  executed  on that file, the error "File is
             locked" (ERR=138) should be generated instead  of  "Fatal
             System I/O failure" (ERR=12).

          -  The output buffer is not flushed at the correct time if a
             RESTORE  statement is used after a PRINT statement ending
             with a semicolon.  The buffer should be flushed when  the
             RESTORE  statement  is executed, but instead a subsequent
             PRINT or INPUT statement will fail with the error "Not at
             end of file".









                                                                Page 9


          -  In some  cases,  the  use  of  the  zero-fill  formatting
             character  (<0>)  and the comma formatting character in a
             PRINT  USING  or  FORMAT$  format   string   results   in
             unexpected additional zeros.  For example:

                  10     PRINT USING "<0>####,###", 123456
                  20     PRINT USING "<0>###,###", 123456
                  RUNNH

                   00,123,456
                   0,123,456



GRAPHICS INCOMPATIBILITIES INTRODUCED BY VAX GKS V3.0

If you install VAX GKS V3.0 or later, the following  incompatibilities
with VAX GKS V2.0 may affect VAX BASIC graphics programs.  Consult the
VAX GKS release notes for more information on changes made in VAX  GKS
Version 3.0.


      o  The VAX BASIC graphics  statement  ASK  DEVICE  VIEWPORT  now
         returns  the boundary values that were previously set, rather
         than boundary values that have been adjusted if necessary  to
         maintain the correct aspect ratio.

         Using VAX GKS Version 2.0, the VAX BASIC ASK DEVICE  VIEWPORT
         statement  returns the "realized" device viewport boundaries.
         "Realized" device viewport boundaries are boundaries that are
         adjusted  by  VAX  GKS when the current boundary settings for
         the device viewport  are  not  proportional  to  the  current
         boundary  settings  for  the  device window.  The adjusted or
         "realized"  boundaries  use  the  largest   possible   device
         viewport that matches the shape of the device window.

         Using VAX GKS Version 3.0 and later, however, the ASK  DEVICE
         VIEWPORT  statement  returns  the  device viewport boundaries
         specified in the most recent SET DEVICE VIEWPORT statement or
         the   default  viewport  boundary  values,  rather  than  the
         "realized" device viewport boundaries.  This change  complies
         with both the ANSI BASIC standard and the ANSI GKS standard.

         A VAX BASIC SUB subprogram has been provided with  VAX  BASIC
         V3.1  to  duplicate  the  previous behavior of the ASK DEVICE
         VIEWPORT         statement.          This         subprogram,
         ASK_REALIZED_DEVICE_VIEWPORT,  resides  in  the  text library
         BASIC$GRAPHICS.TLB and the object library  BASIC$GRAPHICS.OLB
         in  the  BASIC subdirectory under SYS$EXAMPLES.  To duplicate
         the behavior prior to VAX GKS V3.0, replace each  ASK  DEVICE
         VIEWPORT  statement  in  your  program  with  a  call  to the
         subprogram ASK_REALIZED_DEVICE_VIEWPORT.  The  parameters  to
         this  SUB subprogram are the same as the arguments to the ASK
         DEVICE  VIEWPORT  statement.   If  the  ASK  DEVICE  VIEWPORT
         statement does not specify a device-id, specify a zero as the








                                                               Page 10


         first parameter to the ASK_REALIZED_DEVICE_VIEWPORT  routine.
         For example:


             %INCLUDE "ASK_REALIZED_DEVICE_VIEWPORT" %FROM %LIBRARY &
               "SYS$SYSROOT:[SYSHLP.EXAMPLES.BASIC]BASIC$GRAPHICS.TLB"

             PROGRAM My_graphics_application

             EXTERNAL SUB                                         &
               ASK_REALIZED_DEVICE_VIEWPORT (LONG,   ! device-id  &
                                           SINGLE,   ! left       &
                                           SINGLE,   ! right      &
                                           SINGLE,   ! bottom     &
                                           SINGLE)   ! top

             !+
             !   Substitute a call to ASK_REALIZED_DEVICE_VIEWPORT for
             !   the ASK DEVICE VIEWPORT statement, so that the program 
             !   will exhibit the same behavior on both VAX GKS V2.0 
             !   and VAX GKS V3.0 or later.
             !- 

             !   ASK DEVICE VIEWPORT Left_DC, Right_DC, Bottom_DC, Top_DC

                 CALL ASK_REALIZED_DEVICE_VIEWPORT (0%, Left_DC,   &
                   Right_DC, Bottom_DC, Top_DC)
                 .
                 .
                 .
             END PROGRAM

         Note that calling ASK_REALIZED_DEVICE_VIEWPORT  in  place  of
         the  ASK  DEVICE  VIEWPORT  statement  will  produce  correct
         results with VAX GKS V2.0 as well as VAX GKS V3.0 or later.


      o  The VAX BASIC graphics statement LOCATE CHOICE will no longer
         highlight   the   initial  choice  when  the  menu  is  first
         displayed.  The initial menu item will be highlighted as soon
         as  you  attempt to move the cursor, for example, by pressing
         either the UP or DOWN arrow key on a  VT240  terminal.   This
         problem  will  be  fixed  in  a future release of the VAX/VMS
         operating system.


      o  The VAXstation I device type  number  has  changed  from  the
         value  41  to  the  value  42.   This  change  more correctly
         reflects the  different  aspect  ratio  of  a  VAXstation  I.
         Although device type 41 will still work on a VAXstation I, it
         will produce incorrectly sized windows and output.


      o  The numbers of the VAXstation hardware fonts have changed  to
         avoid  conflict  with the VAX GKS software font numbers.  The








                                                               Page 11


         changes to VAXstation hardware font numbers are shown in  the
         following table:
              ________________________________

              Old font number| New font number
              ---------------|----------------
                  -1         |     -201
                             |
                  -2         |     -202
                             |
                  -3         |     -203
              --------------------------------

         In addition, old font number 1  is  also  available  as  font
         number -200.


ADDITIONAL INSTALLATION CONSIDERATIONS

If you choose the option of installing the VAX/VMS system  definitions
during  the  VAX  BASIC installation, VMSINSTAL first verifies whether
you have the file [SYSLIB]SDLNPARSE.EXE installed on your system.   If
SDLNPARSE.EXE  is  not  installed on your system, VMSINSTAL signals an
error.  You must  install  the  MicroVMS  program  development  option
before installing the system definitions.

DIGITAL recommends a WORKING SET quota of 400 to optimize  performance
for accounts primarily accessing VAX BASIC.

DOCUMENTATION ERRORS AND OMISSIONS

Version 3.1 of VAX BASIC provides update pages for the VAX BASIC  User
Manual.   All  known errors and omissions in the VAX BASIC User Manual
have been corrected in the update pages.  Therefore, this section only
contains  descriptions  of  errors  and  omissions  in  the  VAX BASIC
Reference Manual and in Programming with VAX BASIC Graphics.

The following errors exist in the VAX BASIC Reference Manual:

      o  In Chapter 4, page 56, the documentation on the DEF  function
         states  that  DEF  functions  cannot  be  recursive.  This is
         incorrect.  DEF functions can be recursive.

      o  In Chapter 4, page 61, the documentation on the DEF* function
         states  that  DEF*  functions  cannot  be recursive.  This is
         incorrect.  DEF* functions can be recursive.

      o  In Chapter 4, page 106, the first bullet under remark  number
         3  for  the FIND statement contains the text "The primary key
         is #,".  A zero should follow this number sign (#).

      o  In Chapter  4,  page  108,  the  documentation  on  the  FIND
         statement  states  that  a successful random access FIND sets
         the next record pointer to the record with the next value  in
         the  key sort order.  This is incorrect.  A successful random








                                                               Page 12


         access FIND updates the current record pointer but leaves the
         next record pointer unchanged.

      o  In Chapter 4, page 147, the example of  the  INKEY$  function
         does  not  work  correctly if you use either of the following
         keys to generate the escape character (ASCII code 27):

          o  The ESC key on a VT100-series terminal

          o  The CTRL/3 key on a VT200-series terminal


         If you use either  of  these  keys  to  generate  the  escape
         character,   program  execution  is  suspended  indefinitely.
         Then, once you subsequently press another keyboard  key,  the
         program returns the error "Data overflow."

      o  In Chapter 4, page 191, remark number 5 in the description of
         the MAP DYNAMIC statement should read as follows:

         A static string variable must either be a  variable  declared
         in  a  MAP  or  COMMON statement or a parameter declared in a
         SUB, FUNCTION or PICTURE.  It cannot be a parameter  declared
         in a DEF or DEF* function.

      o  In Chapter 4, page  193,  the  documentation  on  the  MARGIN
         statement  states  that  the  default  margin  for a terminal
         format file is 72.  For channel 0,  however,  the  margin  is
         determined by the width of SYS$OUTPUT.

      o  In Chapter 4,  page  316,  the  documentation  on  the  REMAP
         statement  states, "When you specify a data-type (on a FILL),
         all following FILL items are of  that  data  type  until  you
         specify  a  new  data type." This statement is incorrect.  If
         you specify a data type before a  FILL  keyword  in  a  REMAP
         statement, the FILL item is of that data type.  If you do not
         specify a data type, the FILL item is  of  the  default  data
         type.


The following information was erroneously omitted from the  VAX  BASIC
Reference Manual:

      o  In Chapter 4, page  128,  add  the  following  bullets  under
         remark number 1 in the description of the GET statement:

         o An RFA value is only valid  for  the  life  of  a  specific
         version  of  a  file.  If a new version of a file is created,
         the RFA values may change.

         o Attempting to access a record with  an  invalid  RFA  value
         will cause VAX BASIC to signal a run-time error.

      o  In Chapter 4, page 190, add the following to the last  bullet
         in syntax rule number 1 in the description of the MAP DYNAMIC








                                                               Page 13


         statement:

         - Static-str-var cannot be a parameter declared in a  DEF  or
         DEF* function.

      o  In Chapter 4, page 255, add the following bullet under remark
         number 10 in the description of the OPEN statement:

         o Do not use the CONNECT clause  when  accessing  files  over
         DECnet  or VAX BASIC will signal the error "Cannot open file"
         (ERR=162).

      o  In Chapter 4, page 255, add the following bullet under remark
         number 14 in the description of the OPEN statement:

         o The size of the specified map cannot exceed 32767 bytes.

      o  In Chapter 4, page 287, add the following syntax rules to the
         description of the PROGRAM statement:

         3.  The first character of a prog-name must be an  alphabetic
         character  (A  through  Z).   The  remaining  characters,  if
         present, can be any combination of letters, digits (0 through
         9), dollar signs ($), and periods (.), or underscores (_).

         4.  Prog-name cannot be a quoted name.

      o  In Chapter 4, page 316,  add  the  following  to  the  fourth
         bullet  in  syntax  rule  number  1 in the description of the
         REMAP statement:

         - Static-str-var cannot be a parameter declared in a  DEF  or
         DEF* function.

      o  In Chapter 4, page 333, add the following remark to the  list
         of remarks for the RND function:

         4.   The  RND  function  returns  values   over   a   uniform
         distribution between 0 and 1.  This means that there is equal
         probability that the value  will  be  between  0  and  .1  as
         between  .5  and  .6.   This  is  as  opposed to a bell-curve
         distribution where the probability of values in the range  .3
         to .7 would be much higher than the outer ranges.

      o  In Appendix B,  Section  B.3.7,  add  the  following  to  the
         section on user-defined functions:

         DEF functions can be recursive.  However, VAX BASIC does  not
         detect  infinitely  recursive DEF functions.  If your program
         invokes an infinitely recursive DEF  function,  your  program
         will eventually terminate with a fatal error; typically, this
         error will be an access violation.

      o  In Appendix B, note  that  VAX  BASIC  accepts  two  asterisk
         characters (**) as an exponentiation operator.








                                                               Page 14


The following errors exist in Programming with VAX BASIC Graphics:

      o  In Chapter 2,  page  2-8,  the  program  comments  !Draw  the
         horizontal  lines  and  !Draw  the  vertical  lines should be
         reversed.

      o  In Chapter 3, page  3-4,  the  program  comment  !Fill  spine
         should be changed to !Fill book's cover.

      o  In Chapter 4, page 4-3, the first program line in  the  first
         example should be changed to the following:

              SET TEXT FONT 1, 'CHAR'

      o  In Chapter 8, page 8-3, OPEN  "TV38"  in  the  first  example
         should be changed to OPEN "VT38".

      o  In Chapter 8, page  8-17,  the  keyboard  in  figure  8-3  is
         backwards.


The following information was  erroneously  omitted  from  Programming
with VAX BASIC Graphics:

      o  In Chapter 8,  page  8-1,  replace  the  first  paragraph  in
         Section 8.1 with the following:

         To use more than one device, you must include the  OPEN...FOR
         GRAPHICS   statement  in  your  program.   For  example,  the
         following statement opens  a  device  and  identifies  it  as
         device  2.

              OPEN "VTA247:" FOR GRAPHICS AS DEVICE #2

         The quoted string must be one of the following:

         o A system name

         o The logical name for an actual device

         o The file specification of a metafile

         o The file specification of a file that  was  opened  with  a
         specific device type, which you later wish to print to.

      o  In Chapter 9, page 9-131, the HP plotter 7550 should be added
         to  the list of supported devices in Table 9-1.  It is device
         type 53.

REPORTING PROBLEMS

Complete and concise information will help DIGITAL give  accurate  and
timely  service to software problems.  Experience shows that many SPRs
do not contain sufficient information to  duplicate  or  identify  the
problem.  When you prepare to submit an SPR, please do the following:








                                                               Page 15


      o  Describe as accurately as possible the state  of  the  system
         and  the circumstances when the problem occurred.  Include in
         the description the version number of VAX BASIC  being  used.
         (You can find the version number by typing BASIC and pressing
         RETURN.) Illustrate the problem with specific examples.

      o  Reduce the problem to as small a size as possible, preferably
         to a program unit of 30 source lines or fewer.

      o  Remember to include listings of any command  files,  relevant
         data files, CDDL record definitions, and so on.

      o  Provide a listing of the VAX BASIC program.

      o  Submit sources on machine-readable media (floppy diskette  or
         magnetic  tape)  if  possible.  All media will be returned to
         you when the SPR is answered.

      o  Report only one problem per  SPR.   This  will  facilitate  a
         faster response.

      o  Mail the SPR package to DIGITAL.


